home *** CD-ROM | disk | FTP | other *** search
- == ================= ==
- ╦EYBOARD ├ONTROLS
- == ================= ==
-
- ╘HE FOLLOWING KEY COMMANDS ARE
- ACTIVATED BY FIRST PRESSING THE '_'
- (LEFT ARROW) KEY, THEN THE COMMAND
- KEY. ┴ FEW KEY COMMANDS ACTIVATE A
- SMALL MENU OF KEY OPTIONS AND SEVERAL
- COMMANDS WILL PROMPT FOR A FILENAME
- OR OTHER DATA; SIMPLY FOLLOW THE
- PROMPTS.
-
- ╦┼┘ ┴├╘╔╧╬
- 1 ┼XIT ╘ASS AND GO BACK TO ┬┴╙╔├
- ! ╙HOW A ╙┼╤ FILE ON SCREEN
- (├┬═ PAUSES, ╥/╙ ABORTS)
- 2 ╧UTPUT A SEPARATOR LINE TO THE
- CURRENT CURSOR LINE
- 3 ┴SSEMBLE TO BANK 0
- # ┴SSEMBLE TO CURRENT OBJECT BANK
- 4 ╨RINT SOURCE (?: PRINTER,
- *: SCREEN, <NAME>: FILE)
- 5 ┴SSEMBLE TO DISK
- 6 ═AKE .BYTE STATEMENTS FROM OBJECT
- BANK
- 7 ╙ET RETURN TAB (COLUMN CURSOR
- SITS AT AFTER A RETURN)
- 8 ╙ET SOURCE TAB (COLUMN OPCODE
- SOURCE STARTS AT)
- + ╨ERFORM HEXADECIMAL ADDITION
- - ╨ERFORM HEXADECIMAL SUBTRACTION
- ─┼╠ ─ELETE LINE UNDER CURSOR
- ╔╬╙╘ ╠INE INSERT TOGGLE
- ^ ├OPY LINE UNDER CURSOR TO THE
- LINE BUFFER
- # ╨ASTE LINE BUFFER TO THE CURRENT
- CURSOR LINE
- Q ═OVE CURSOR TO COL. 0 (FAR LEFT)
- W ╫RITE SOURCECODE TO DISK AS ╙┼╤
- E ┼NTER A ╙┼╤ FILE FROM DISK,
- TREATING LINES AS SOURCE CODE
- R ╥EPLACE A STRING. ╨ROMPTS FOR
- SEARCH AND REPLACEMENT STRINGS
- AND THEN FINDS THE FIRST
- OCCURANCE OF THE SEARCH STRING
- T ┼XECUTES FIRST REPLACEMENT OF A
- FOUND SEARCH STRING
- Y ┼XECUTES REPLACEMENTS FOR ┴╠╠
- OCCURANCES OF THE SEARCH STRING
- U ╠IST LABELS (?: PRINTER,
- *: SCREEN, <NAME>: FILE)
- I ╞IND FIRST OCCURANCE OF GIVEN
- LABEL STRING IN SOURCE
- @ ─ISKCOMMAND (@ FOR STATUS)
- * ─IRECTORY (├┬═ PAUSE, ╥/╙ ABORT)
- A ┼NTER ╨┼╘╙├╔╔ CODES (_ TO ABORT)
- S ╙AVE SOURCE FILE TO DISK
- D ─EVICE # INCREMENT (FINDS NEXT
- AVAILABLE DRIVE ON SERIAL BUS)
- F ╞IND FIRST OCCURANCE OF GIVEN
- STRING IN SOURCE
- G ╟OTO MARK
- H ╞IND NEXT OCCURANCE OF SEARCH
- STRING IN SOURCE
- K ╥EDEFINE FKEY ╞3-╞6
- ╦ ╞-KEY RESET TO INTERNAL DEFAULTS
- L ╠OAD SOURCE FILE FROM DISK
- : ╠IST MARKS
- ; ╦ILL MARK
- Z ╒NDO LINE EDITING
- C ├OLDSTART (KILLS SOURCE!)
- B ┴CTIVATE BLOCK COMMANDS
- W ╫RITE BLOCK TO A ╙┼╤ FILE
- C ├OPY DEFINED BLOCK TO CURRENT
- CURSOR POSITION
- M ═OVE DEFINED BLOCK TO CURRENT
- CURSOR POSITION
- K ╦ILL DEFINED BLOCK
- N ╟O TO SPECIFIC LINE NUMBER
- M ╙ET MARKS (0-9 FOR MARKS,
- S - BLOCK START, E - BLOCK END)
- = ╩OIN REMAINDER OF CURRENT LINE
- TO PRECEEDING LINE
- / ─ELETE FROM CURSOR TO END OF
- LINE
- ╥┼╘╒╥╬ ┬REAK CURRENT LINE INTO TWO
- LINES AT CURSOR
- ╙╨┴├┼ ┬LANK CURRENT LINE
- ├╥╙╥-╥ ═OVE CURSOR TO COLUMN 39
- ├╥╙╥-╠ ═OVE CURSOR TO COLUMN 0
- ├╥╙╥-─ ═OVE CURSOR DOWN 200 LINES
- ├╥╙╥-╒ ═OVE CURSOR UP 200 LINES
- P ┴CTIVATE PREFERENCE COMMANDS
- 0-6 ┼DITS COLOR OF GIVEN COLOR #
- S ┼DIT SEPERATOR TEMPLATE
- ^ ╙AVE TURBO WITH NEW PREFERENCES
- ╥ ┴CTIVATE ╥┼╒ COMMANDS
- L ╠OAD FILE TO CURRENT OBJECT BANK
- B ┬ACKUP CURRENT SOURCE TO A BANK
- O ├HANGE BANK # OF OBJECT BANK
- S ├HANGE BANK # OF SOURCE BANK
- (THIS ALSO SWAPS IN THE SOURCE
- FROM THE GIVEN SOURCE BANK)
- J ╙ET LOCATION OF $40 BYTES OF
- JUMPBACK CODE
-
-
- ╫ITHOUT OTHER PREVIOUS KEYPRESSES:
-
- ╦EY ┴CTION
- ╔╬╙╘ ├HARACTER INSERT TOGGLE
- ╞1 ═OVE CURSOR UP 20 LINES
- ╞2 ╘OP OF SOURCE
- ╞7 ═OVE CURSOR DOWN 20 LINES
- ╞8 ┬OTTOM OF SOURCE
- ╞3 ═OVE CURSOR UP 200 LINES
- ╞4 ┴SSEMBLE AND START
- ╞5 ═OVE CURSOR DOWN 200 LINES
- ╞6 ╥┼╒ COMMANDS
-
- ╬OTE THAT ╞3-╞6 ARE REDEFINABLE.
-
-
- - --------------- -
- ╥┼╒ ┼XPLANATION
- - --------------- -
-
- ╧UR ╥┼╒ MODIFICATION ALWAYS USES
- BANK 0 AS THE ASSEMBLY BANK. ─EFAULT
- OBJECT/SOURCE BANKS DEPEND ON WHAT
- SIZE OF ╥┼╒ IS DETECTED:
- 128K: SRC 0, OBJ 1
- 256+: SRC 2, OBJ 1
-
- ╬OTE THAT USERS OF 128K ╥┼╒ WILL ╬╧╘
- BE ABLE TO ALTER EITHER BANK USED. ┴LSO
- YOU WILL NOT BE ABLE TO BACKUP YOUR
- SOURCE BECAUSE OF THE 2 BANKS AVAILABLE
- BOTH ARE USED. ╞OR 256/512K USERS YOU
- HAVE BANKS 2-3 OR BANKS 2-7 OPEN FOR
- BANKING SOURCES.
- ╫HEN YOU ASSEMBLE THE FOLLOWING WILL
- OCCUR: THE CURRENT OBJECT BANK WILL
- BE COPIED TO BANK 0, THEN CODE IS
- ASSEMBLED INTO BANK 0; C64 AND BANK 0
- ARE SWAPPED AND YOUR CODE EXECUTES.
- ┴ ROUTINE IS STORED AT $180 (THIS IS
- BY DEFAULT, IT IS ALTERABLE FROM THE
- ╥┼╒ COMMAND MENU) THAT WHEN JMP'ED
- TO REBANKS YOUR SOURCE FROM BANK 0
- AND RESTARTS TURBO.
- ╘HE OBJECT AND SOURCE BANKS IN
- EFFECT ARE DISPLAYED IN THE STATUS
- LINE, AND (IF YOU HAVE A 256K/512K
- ╥┼╒) CAN BE SWITCHED TO ANY BANK
- EXCEPT BANK 0. ╧F COURSE IT IS
- HIGHLY ADVISED YOU DON'T USE THE
- SAME BANK FOR OBJECT AND SOURCE!
-
-
-
- == ===================== ==
- ╘URBO ═ACRO ╧PERATION
- == ===================== ==
-
- ╫HAT FOLLOWS NOW IS A DETAILED
- EXPLANATION OF ALL ASPECTS OF
- THE ASSEMBLER, INCLUDINGS A LOOK
- AT HOW CONSTANTS/EXPRESSIONS MAY
- BE DEFINED, AND A LIST OF ALL THE
- PSUEDO-OPS AVAILABLE WITH EXAMPLES
- WHERE NECESSARY!
-
-
- - ----------------- -
- ├ONSTANT ╓ALUES
- - ----------------- -
-
- ├ONSTANT VALUES CAN BE EXPRESSED IN
- EITHER DECIMAL, HEXADECIMAL, BINARY,
- OR AS CHARACTERS NO PRECEEDING SYMBOL
- INDICATES A DECIMAL VALUE):
-
- $ DENOTES A HEXADECIMAL VALUE
- % DENOTES A BINARY VALUE
- "A" DENOTES A CHARACTER VALUE
-
- -=> ┼XAMPLES
-
- $20 HEX $20, DECIMAL 32
- 15 HEX $0F, DECIMAL 15
- %10001000 HEX $88, DECIMAL 135
- "1" HEX $31, DECIMAL 49
-
-
- - ----------- -
- ┼XPRESSIONS
- - ----------- -
-
- ┼XPRESSIONS IN ╘URBO ═ACRO ╨RO CAN BE
- FORMED WITH THE FOLLOWING OPERATORS,
- ALL OF WHICH ARE BINARY OPERATORS
- (MEANING THEY REQUIRE A VALUE ON THE
- RIGHT ┴╬─ LEFT SIDE OF THE OPERATOR):
-
- + FOR ADDITION
- - FOR SUBTRACTION
- * FOR MULTIPLICATION
- / FOR DIVISION
- & FOR BITWISE AND
- . FOR BITWISE OR
- : FOR BITWISE EOR
-
- ╓ALUES USED WITH EXPRESSIONS CAN BE
- CONSTANT VALUES DESCRIBED ABOVE, OR
- LABELS. ╬OTE THAT YOU CAN ALSO USE
- PARENTHESIS AND AS YOU WOULD EXPECT
- THEY AFFECT THE ORDER IN WHICH THE
- EXPRESSION IS EVALUATED:
-
- -=> ┼XAMPLES
-
- $20 + 4 = HEX $24, DEC 36
- 15 - %00000011 = HEX $0C, DEC 12
- $FF & $F0 = HEX $F0, DEC 240
- (2*$10)+1 = HEX $21, DEC 33
- 2*($10+1) = HEX $22, DEC 34
-
-
- ╘HE '*' HAS A DIFFERENT MEANING WHEN
- IT IS USED AS A VALUE AND NOT AN
- OPERATOR. ╙ETTING * EQUAL TO A VALUE
- CHANGES THE CURRENT PROGRAM COUNTER
- THE ASSEMBLER IS USING. ┘OU CAN RESET
- THE VALUE OF * THROUGHOUT YOUR CODE.
- ┘OU SHOULD ALWAYS SET * AT THE TOP OF
- YOUR SOURCE TO ENSURE TASS BEGINS
- ASSEMBLING WHERE YOU EXPECT IT TO.
- ╘HE VALUE OF * IN EXPRESSIONS IS
- ALWAYS THE CURRENT PROGRAM COUNTER.
-
- -=> ┼XAMPLES
-
- *= $1000 SETS THE PROGRAM COUNTER
- TO $1000; CODE STARTS
- ASSEMBLING THERE
- LDA #>(*) ASSEMBLES AS LDA #$10
- BNE *+5 THIS BRANCH USES * TO
- SKIP A FOLLOWING JMP
- OPCODE
-
-
- ┼XPRESSIONS CAN ALSO BE MODIFIED BY
- THE FOLLOWING CHARACTERS:
-
- < DENOTES THAT THE LOW BYTE OF
- THE FOLLOWING CONSTANT OR
- EXPRESSION SHOULD BE TAKEN
- > DENOTES THAT THE HI BYTE OF
- THE FOLLOWING CONSTANT OR
- EXPRESSION SHOULD BE TAKEN
- # DENOTES THAT THE ASSEMBLER MUST
- TREAT THE FOLLOWING VALUE AND
- THE OPCODE USING IT AS AN
- IMMEDIATE ADDRESSING SITUATION
- ! DENOTES AN EXPRESSION WHOSE
- VALUE MAY CURRENTLY OR LATER
- BE DETERMINED AS 1 BYTE BUT
- WHICH SHOULD BE EXPANDED INTO
- 2 BYTES. ╙EE BELOW FOR AN
- EXAMPLE.
-
- -=> ┼XAMPLES
-
- >$0314 = HEX $03
- <$0400+(6*$28) = HEX $F0
- LDA #$28 ASSEMBLES AS A9 28
- LDA $28 ASSEMBLES AS A5 28
-
-
- ┼XAMPLES OF THE USE OF '!' ARE SHOWN
- BELOW. ╦EEP IN MIND THAT THE TASS
- EDITOR WILL NOT ALLOW YOU TO ENTER A
- CONSTANT VALUE LIKE $0002 OR $00FF;
- IT AUTOMATICALLY SHORTENS IT TO $02
- OR $FF. ╘HIS MAY BE SEEN AS A
- DEFICIENCY OF TASS BUT YOU HAVE A WAY
- AROUND THIS WHEN YOU REALLY NEED TO
- SPECIFY TO THE ASSEMBLER LINES LIKE
- LDA $0002:
-
- LDA $02 ASSEMBLES AS LDA $02
- LDA !$02 ASSEMBLES AS LDA $0002
-
- ┴NOTHER USE IS TO PREVENT PHASE
- ERRORS. ┴ PHASE ERROR OCCURS WHEN THE
- LENGTH OF CODE DETERMINED BY PASS ONE
- AND PASS TWO OF THE ASSEMBLER DO NOT
- MATCH. ╧NE WAY THIS CAN OCCUR IS BY
- LABELS REFERENCED BEFORE THEY ARE
- DEFINED:
-
- LDA BAH ; BAH IS UNDEFINED
- RTS
- BAH = $02 ; BAH IS NOW DEFINED
-
- ┴SSEMBLING THIS CODE BLOCK RESULTS IN
- A PHASE ERROR, BECAUSE TASS ASSUMES
- UNDEFINED LABELS REPRESENT WORDS
- DURING THE FIRST PASS. ╔F THE LABEL IS
- THEN FOUND DEFINED AS A BYTE VALUE,
- THE SECOND PASS WILL BE SHORTER THAN
- THE FIRST AND A PHASE ERROR STRIKES.
- ╘O PREVENT THE PHASE ERROR CHANGE THE
- CODE TO LOOK LIKE:
-
- LDA !BAH
- RTS
- BAH = $02
-
- ╘HE '!' TELLS TASS THAT THE
- EXPRESSION FOLLOWING SHOULD BE
- TREATED AS A WORD NO MATTER HOW THE
- LABEL WAS DEFINED.
- ╧BVIOUSLY THE BEST CHOICE WOULD BE
- TO DEFINE LABELS BEFORE REFERENCING
- THEM BUT IN OUR OWN EXPERIENCE THIS
- IS SOMETIMES UNDESIRED SO USING '!'
- NOTATION WILL HELP AVOID THE WOES OF
- PHASE ERRORS.
-
-
- - -------- -
- ├OMMENTS
- - -------- -
-
- ┘OU CAN ADD COMMENTS TO YOUR SOURCE
- CODE BY USING THE ';' (SEMICOLON). ┴NY
- ';' FOUND BY TURBO WILL CAUSE THE
- ASSEMBLER TO IGNORE WHATEVER FOLLOWS
- THE ';' TIL THE END OF THAT LINE. ╙O
- COMMENTS CAN FOLLOW AN OPCODE, OR A
- PSUEDO-OP, OR THEY CAN BE ON A LINE BY
- THEMSELVES.
-
- -=> ┼XAMPLE
-
- ; THIS IS A COMMENT
- LDA #$01 ; THIS IS A COMMENT
- STA $D020 ; SO IS THIS!
-
-
- - ---------------- -
- ╘ABLE ╨SUEDO-OPS
- - ---------------- -
-
- ╘HE TABLE PSUEDO-OPS ARE THE STANDARD
- WAY TO MAKE DATA OR STRING TABLES.
-
- .BYTE - TAKES A LIST OF BYTE VALUES
- WHICH CAN BE DECIMAL, HEX,
- BINARY OR CHARACTERS
- (DENOTED BY A STRING WITH
- ONE CHARACTER) AND
- PRODUCES A TABLE OF BYTES.
- .WORD - TAKES A LIST OF WORD VALUES
- WHICH CAN BE DECIMAL, HEX,
- OR BINARY AND PRODUCES A
- TABLE OF BYTES WHERE THE
- WORDS ARE ARRANGED IN
- LOW-BYTE HI-BYTE ORDER.
- .RTA - TAKES A LIST OF WORD VALUES
- WHICH CAN BE DECIMAL, HEX,
- OR BINARY AND PRODUCES A
- TABLE OF BYTES WHERE THE
- WORDS ARE DECREMENTED BY
- 1 AND SET IN LOW-BYTE
- HI-BYTE ORDER; THIS IS
- USEFUL FOR DOING STACK
- MANIPULATION WITH E.G.
- RETURN ADDRESSES.
- .TEXT - TAKES A STRING AND PRODUCES
- FROM IT A TABLE OF BYTES.
- .NULL - TAKES A STRING AND PRODUCES
- FROM IT A TABLE OF BYTES
- TERMINATED WITH A NULL
- (0) BYTE.
- .SHIFT - TAKES A STRING AND PRODUCES
- FROM IT A TABLE OF BYTES
- WHERE THE LAST BYTE HAS
- IT'S HIGH-BIT SET TO 1.
-
- -=> ┼XAMPLES
-
- .BYTE 25,"A",$CC = $19 $41 $CC
- .TEXT "HI" = $48 $49
- .NULL "HI" = $48 $49 $00
- .SHIFT "HI" = $48 $C9
- .WORD $FCE2 = $E2 $FC
- .RTA $FCE2 = $E1 $FC
-
-
- - -------------------------- -
- ╨RINTER ├ONTROL ╨SUEDO-OPS
- - -------------------------- -
-
- ╘HE PRINTER PSUEDO-OPS ALLOW SOME
- CONTROL DURING PRINTING OF SOURCE TO
- PRINTER, DISK, OR SCREEN (ACTIVATED
- WITH KEY COMMAND BACK-ARROW+4).
- .PROFF AND .PRON ALLOW YOU TO SKIP
- PRINTING SECTIONS OF CODE, WHILE
- .HIDEMAC AND .SHOWMAC LET YOU CONTROL
- WHETHER THE EXPANDED MACRO GETS
- PRINTED OR JUST THE MACRO CALL (SEE
- BELOW).
-
- .PRON - TURN ON PRINTING
- .PROFF - TURN OFF PRINTING
- .HIDEMAC - SHOW UNEXPANDED CALLS
- .SHOWMAC - SHOW EXPANDED CALLS
-
-
- - ------------------------------- -
- ├ONDITIONAL ┴SSEMBLY ╨SUEDO-OPS
- - ------------------------------- -
-
- ╘HESE PSUEDO-OPS ALLOW ╘URBO ═ACRO TO
- ASSEMBLE CHUNKS OF CODE BASED ON THE
- EVALUATION OF AN EXPRESSION - IF IT'S
- EQUAL OR NOT EQUAL TO ZERO OR IF IT'S
- POSITIVE OR NEGATIVE. ┘OU CAN USE THE
- FUNCTIONALITY TO SELECTIVELY ASSEMBLE
- CODE BASED ON THE VALUE OF A LABEL,
- FOR EXAMPLE, OR EVEN THE CURRENT VALUE
- OF THE PROGRAM COUNTER.
-
- .IF - TESTS VALUE OR EXPRESSION
- FOR INEQUALITY WITH ZERO,
- SAME AS .IFNE
- .IFNE - TESTS VALUE OR EXPRESSION
- FOR INEQUALITY WITH ZERO,
- SAME AS .IF
- .IFEQ - TESTS VALUE OR EXPRESSION
- FOR EQUALITY WITH ZERO
- .IFPL - TESTS VALUE OR EXPRESSION
- FOR POSITIVE
- .IFMI - TESTS VALUE OR EXPRESSION
- FOR NEGATIVE
- .ENDIF - MARKS THE END OF CODE
- ASSEMBLED BY ANY .IF
- TAKEN
-
- -=> ┼XAMPLES
-
- CYCLE = 65
- .IFNE CYCLE-65 ;IF CYCLE != 65
- NOP ;PRODUCE ONE NOP
- .ENDIF
-
-
- - ---------------- -
- ┬LOCK ╨SUEDO-OPS
- - ---------------- -
-
- ╘HE BLOCK PSUEDO-OPS ALLOW A VERY
- USEFUL OPERATION: BLOCKING OFF A
- SECTION OF CODE SO THAT IT CAN CONTAIN
- ITS OWN LOCAL LABELS, WHICH CAN BE
- USED AGAIN IN THE OUT-OF-BLOCK CODE
- OR WITHIN A DIFFERENT BLOCK! ╬ORMAL
- TASS DISALLOWS REUSING LABELS. ╒SING
- BLOCKS YOU CAN CREATE SUBROUTINE
- LIBRARIES FOR YOUR OWN USE! ╬EED A
- DOTPLOTTER IN YOUR PROGRAM? ╠OAD THE
- DOTPLOTTER SUBROUTINE FROM YOUR DISK
- AND IF YOU BLOCKED IT, YOU DON'T NEED
- TO WORRY ABOUT CHANGING ANY LABELS IN
- YOUR MAIN PROGRAM THAT WOULD NORMALLY
- CONFLICT WITH LABELS IN THE
- SUBROUTINE.
-
- .BLOCK - STARTS A CODE BLOCK
- .BEND - ENDS A CODE BLOCK
-
-
- - ------------------- -
- ╓ARIABLE ╨SUEDO-OPS
- - ------------------- -
-
- ╓ARIABLES DEFINE LABELS THAT CAN BE
- REDEFINED. ╘HIS IS THE ONLY WAY TO
- CHANGE THE VALUE OF A LABEL IN THE
- SAME CONTEXT (I.E. IN THE SAME BLOCK
- OR IN THE MAIN CODE) WITHOUT GETTING
- A 'DOUBLE DEFINED' ERROR.
-
- .VAR - DEFINES A VARIABLE IDENTIFIED
- BY THE LABEL PRECEEDING
- '.VAR', TAKING THE VALUE
- DEFINED BY THE EXPRESSION
- FOLLOWING THE '.VAR'.
-
- -=> ┼XAMPLES
-
- VA .VAR $01 ;DEFINES A VAR NAMED
- ; VA WITH VALUE OF 1
- LDA #VAR ;RESULTS IN LDA #$01
- VA .VAR VA+1 ;REDEFINES VA TO
- ; IT'S CURRENT VALUE+1
- LDA #VAR ;RESULTS IN LDA #$02
-
-
- - ---------------- -
- ═ACRO ╨SUEDO-OPS
- - ---------------- -
-
- ═ACROS ARE A MEANS OF INSERTING A
- LARGER CHUNK OF CODE BY USING A SHORT
- MACRO-LABEL FOLLOWED BY 0 TO 8
- ARGUMENTS. ╘HIS MACRO-LABEL IS
- EXPANDED INTO THE CHUNK OF CODE AT
- ASSEMBLY TIME, WITH SUBSTITUTIONS
- MADE FOR ARGUMENTS GIVEN. ┴ MACRO
- CALL IS IDENTIFIED BY A '#' FOLLWED
- BY THE MACRO-LABEL.
-
- .MACRO - STARTS A MACRO
- DEFINITION AND
- AUTOMATICALLY MAKES A
- BLOCK AROUND THE MACRO
- .SEGMENT - STARTS A MACRO
- DEFINITION BUT WITHOUT
- A BLOCK
- .ENDM - ENDS A MACRO DEFINITION
-
- -=> ┼XAMPLES
-
- POKE .MACRO ;START MACRO DEF
- LDA #\2 ;THE \2 MEANS AN
- ; ARGUMENT
- ; SUBSTITUTION, IN
- ; THIS CASE THE
- ; SECOND MACRO ARG
- ; WILL REPLACE THE \2
- STA \1 ;ANOTHER SUBSTITUTION
- .ENDM ;END MACRO DEF
-
- ╔N YOUR CODE YOU TYPE:
-
- #POKE $D020,0
-
- ╒PON ASSEMBLY THAT MACRO CALL IS
- EXPANDED, AND SUBSTITUTIONS ARE MADE
- (IN THIS CASE \1 IS REPLACED BY $D020
- AND \2 IS REPLACED BY 0) RESULTING IN
- THE FOLLOWING ASSEMBLY BEING GENERATED:
-
- LDA #$00
- STA $D020
-
- ╚ERE IS A MORE COMPLEX EXAMPLE SHOWING
- RECURSION WITH MACROS:
-
- TABLE .MACRO ;START MACRO DEF
- CNT .VAR \1+1 ;SET VAR CNT TO ARG 1
- ; PLUS 1
- #TAB ;A MACROCALL WITHIN
- ; A MACRO!
- .ENDM ;END MACRO DEF
-
- TAB .SEGMENT ;START MACRO DEF
- CNT .VAR CNT-1 ;DECREMENT CNT
- .IF CNT ;IF CNT != 0
- #TAB ;THEN MACROCALL
- ; ITSELF (TAB)
- .ENDIF ;END OF THE IF
- .BYTE CNT ;ASSEMBLE A BYTE WITH
- ; CURRENT VALUE OF CNT
- CNT .VAR CNT+1 ;INCREMENT CNT
- .ENDM ;END MACRO DEF
-
- #TABLE 5 ;CALL THE MACRO
- ; TO CREATE A BYTE
- ; TABLE FROM 0 TO 5
-
-
- ╚ERE IS AN EXAMPLE OF USING A TEXT
- PARAMETER IN A MACRO DEFINITION AND
- CALL:
-
- ERROR .MACRO ;START MACRO DEF
- LDA #<TX ;LO-BYTE OF TX
- LDY #>TX ;HI-BYTE OF TX
- JSR $AB1E ;PRINT IT
- JMP END ;SKIP TEXT DATA
- TX .NULL "@1" ;@1 IS REPLACED BY A
- ; TEXTUAL ARGUMENT
- END .ENDM ;END MACRO DEF
-
-
- ╙O YOU SEE, USE \X FOR NUMERICAL
- ARGUMENTS, AND @X FOR TEXT ARGUMENTS,
- WHERE X DENOTES THE ARGUMENT NUMBER.
-
- ╘EXT ARGUMENTS CAN BE USED TO MODIFY
- THE OPCODES THEMSELVES! ┼XAMPLE:
-
- DO .SEGMENT
- .BLOCK
- LOOP .ENDM
-
- WHILE .SEGMENT ;START MACRO DEF
- B@1 LOOP ;THE @1 WILL BE
- ; REPLACED BY A
- ; TEXT ARGUMENT
- .BEND
- .ENDM ;END MACRO DEF
-
- LDX #5 ;START OF CODE
- #DO ;CALL MACRO DO
- LDY #2
- LDA #"*"
- #DO ;CALL MACRO DO
- JSR $FFD2
- DEY
- #WHILE "PL" ;CALL MACRO
- ; 'WHILE' USING
- ; PARAMETER "PL"
- LDA #" " ;PRINT SPACE
- JSR $FFD2
- DEX
- #WHILE "NE" ; CALL MACRO
- ; 'WHILE' WITH
- ; PARAMETER "NE"
-
-
- - ---------------------------------- -
- ╒NCONDITIONAL ┬RANCHING ╨SUEDO-OPS
- - ---------------------------------- -
-
- ╘HESE PSUEDO-OPS ALLOW YOU TO FORCE
- THE ASSEMBLER TO JUMP TO A GIVEN LABEL
- AND CONTINUE ASSEMBLING FROM THERE.
- ╘HIS CAN BE EXTREMELY USEFUL FOR
- REPEATING A BYTE OR SHORT CODE BLOCK
- 10, 100, OR EVEN MORE TIMES. ╧NLY
- LABELS FLAGGED WITH A .LBL PSUEDO-OP
- CAN BE REFERENCED BY A .GOTO!
-
- .LBL - IDENTIFIES A LABEL THAT
- CAN BE USED BY A .GOTO
- .GOTO - CAUSES ASSEMBLER TO GOTO
- THE LABEL REFERENCED AND
- CONTINUE ASSEMBLING FROM
- THAT POINT ON
-
- -=> ┼XAMPLES
-
- CNT .VAR $0100 ;CNT = $100
- LOOP .LBL ;LABEL 'LOOP' IS
- ; PREPARED TO BE
- ; A .GOTO TARGET
- NOP
- CNT .VAR CNT-1 ;DEC CNT
- .IF CNT ;IF CNT != 0
- .GOTO LOOP ;GOTO LOOP
- .ENDIF ;UNTIL ALL $100
- ; NOP'S ARE
- ; ASSEMBLED
-
-
- - ------------------- -
- ╔NCLUDING ╨SUEDO-OP
- - ------------------- -
-
- ╘HE .INCLUDE PSUEDO-OP ALLOWS YOU TO
- ASSEMBLE IN LARGE CHUNKS OF CODE OR
- LABEL DATA. ╞OR EXAMPLE, YOU COULD USE
- .INCLUDE TO ASSEMBLE IN A ╙┼╤ FILE
- WITH LABEL DEFINITIONS FOR ALL OF THE
- KERNAL JUMPTABLE, OR YOU COULD KEEP
- SMALL SUBROUTINES IN ╙┼╤ FORM AND
- INCLUDE THEM IN AS YOU NEED THEM.
-
- .INCLUDE - LOAD AND ASSEMBLE A
- SPECIFIED FILE FROM DISK
- DURING THE CURRENT
- ASSEMBLY; THE FILE MUST
- BE A ╙┼╤ FILE!
-
-
- ***** V1.0 01/05/96
-
-